<u># 用法</u>
<em>1、引入箭头函数有两个方面的作用：更简短的函数并且不绑定this</em>
<em>2、比函数表达式更简洁，并且没有自己的this，arguments，super或new.target</em>
<em>3、箭头函数表达式更适用于那些本来需要匿名函数的地方，并且它不能用作构造函数</em>
<u># 基本语法</u>
<b>(</b> <s>param1</s>, <s>param2</s>, <s>...</s><b> ) => {</b> <s>statements</s> <b>}</b>
<b>(</b> <s>param1</s>, <s>param2</s>, <s>...</s><b> ) =>  <s>statements</s> === <b>(</b> <s>param1</s>, <s>param2</s>, <s>...</s><b> ) => { return <s>statements</s> <b>}</b>
<b>(</b> <s>param1</s><b> ) => {</b> <s>statements</s> <b>}</b> === <s>param1</s> <b>=> {</b> <s>statements</s> <b>}</b>  							<em> // 当只有一个参数时，圆括号是可选的</em>
<b>( ) => { <s>statements</s> }</b> 																<em>// 没有参数的函数应该写成一对圆括号</em>
<u># 高级语法</u>
<s>param</s> <b>=></b> <i>( <s>{ foo:1 }</s>)</i> 								<em>// 加括号的函数体返回对象字面量表达式</em>
<b>(</b> <s>param1</s>, <s>param2</s>, <b>...</b><s>rest</s> <b>) => {</b> <s>statements</s> <b>}</b> 			<em>// 剩余参数</em>
<b>(</b> <s>param</s><b>=defaultValue ) => {</b> <s>statements</s> <b>}</b> 			<em>// 默认参数</em>
<u># 参数说明</u>
<u># 返回值</u>
<em>默认情况下，函数是返回 undefined 的。想要返回一个其他的值，函数必须通过一个 return 语句指定返回值</em>

<u># 示例</u>
<q>var foo = ( ) => { }</q> 					<em>// 无参数</em>
<q>var foo = name => { }</q> 					<em>// 一个参数</em>
<q>var foo = (name,age) => { }</q> 			<em>// 多个参数</em>
<q>var foo = name => name  </q> 				<em>// 返回值</em>
<q>var foo = name => { return name }  </q> 		<em>// 返回值</em>
<q>var foo = name => true ? 1 : 0  </q> 			<em>// 三元运算返回</em>
<q>var foo = ( ) => ({ a: 0 })  </q> 				<em>// 返回值为对象字面量</em>
<q>var foo = ( name=10 ) => { }  </q> 			<em>// 默认参数</em>
<em># 剩余参数</em>
<q>var foo = ( a,...args ) => {</q>
	<em>console.log(<q>args</q>)</em> 					<em>// 返回由实参组成的一个数组，=> [1,2]</em>
<q>}</q>
<em> foo(0,1,2)</em>
<em># 匿名箭头函数</em>
<q>[ ].map(v=>v)</q>
<q>[ ].forEach((v,i)=>{ })</q>
<em># 换行</em>
<q>var foo = ( ) => (</q>
	<em>0</em>
<q>)</q>

<u># call( )、apply( )、bind( ) 调用</u>
<em>由于箭头函数没有自己的this指针，通过 call() 或 apply() 方法调用一个函数时，只能传递参数（不能绑定this），他们的第一个参数会被忽略</em>
<em>this.m = 0</em>
<em>var foo = x => this.m + 10</em>
<em>foo.<b>call</b>( { m: 10 }, 10 ) </em> 			<em>// => 10</em>

<u># 使用箭头函数作为方法</u>
<em>var obj = {</em>
	<em>start: <b>( ) => { }<b></em>
<em>}</em>

<u># 优先解析</u>
<em>let callback</em>
<em>callback = callback || function( ) { }</em> 		<em>// 正常</em>
<em>callback = callback || <b>( ) => { }</b></em> 			<em>// 会报语法错误</em>
<em>callback = callback || <b>( ( ) => { } )</b></em> 			<em>// 正常</em>

<u># 没有 this</u>
<u># 不绑定 arguments</u>
<u># 没有 new 操作符，即不能实例化对象</u>
<u># 没有构造函数</u>
<u># 没有 prototype</u>
<u># 不能使用 yield 关键字，即：不能用作函数生成器</u>